import java.awt.Color;
import java.util.Date;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.time.Minute;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

/**
 * A simple demonstration application showing how to create a dual axis chart
 * based on data from two {@link CategoryDataset} instances.
 * 
 */
public class DualAxisDemo2 extends ApplicationFrame {

	/**
	 * Creates a new demo instance.
	 * 
	 * @param title
	 *            the frame title.
	 */
	public DualAxisDemo2(final String title, Date[] dates, String[] xpMin) {


        super(title);

        final CategoryDataset dataset1 = createDataset1(dates,xpMin);

        // create the chart...
        final JFreeChart chart = ChartFactory.createBarChart(
            "Dual Axis Chart",        // chart title
            "Category",               // domain axis label
            "Value",                  // range axis label
            dataset1,                 // data
            PlotOrientation.VERTICAL,
            true,                     // include legend
            true,                     // tooltips?
            false                     // URL generator?  Not required...
        );

        // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
        chart.setBackgroundPaint(Color.white);
//        chart.getLegend().setAnchor(Legend.SOUTH);

        // get a reference to the plot for further customisation...
        final CategoryPlot plot = chart.getCategoryPlot();
        plot.setBackgroundPaint(new Color(0xEE, 0xEE, 0xFF));
        plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);

        final CategoryDataset dataset2 = createDataset2();
        plot.setDataset(1, dataset2);
        plot.mapDatasetToRangeAxis(1, 1);

        final CategoryAxis domainAxis = plot.getDomainAxis();
        domainAxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45);
//        final ValueAxis axis2 = new NumberAxis("Secondary");
//        plot.setRangeAxis(1, axis2);

        final LineAndShapeRenderer renderer2 = new LineAndShapeRenderer();
        renderer2.setToolTipGenerator(new StandardCategoryToolTipGenerator());
        plot.setRenderer(2,	renderer2);
        plot.setDatasetRenderingOrder(DatasetRenderingOrder.REVERSE);
        // OPTIONAL CUSTOMISATION COMPLETED.

        // add the chart to a panel...
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        setContentPane(chartPanel);

	}
	
	/**
	 * Creates a sample dataset.
	 * 
	 * @return The dataset.
	 */
	private CategoryDataset createDataset1(Date[] dates, String[] xpMin) {
		// create the dataset...
		final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		for (int i = 0; i < dates.length; i++) {
			dataset.addValue(Integer.parseInt(xpMin[i]),"First",dates[i].toString());
		}
		return dataset;
	}
	
	 private CategoryDataset createDataset2() {

	        // row keys...
	        final String series1 = "Fourth";

	        // column keys...
	        final String category1 = "Category 1";
	        final String category2 = "Category 2";
	        final String category3 = "Category 3";
	        final String category4 = "Category 4";
	        final String category5 = "Category 5";
	        final String category6 = "Category 6";
	        final String category7 = "Category 7";
	        final String category8 = "Category 8";

	        // create the dataset...
	        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

	        dataset.addValue(15.0, series1, category1);
	        dataset.addValue(24.0, series1, category2);
	        dataset.addValue(31.0, series1, category3);
	        dataset.addValue(25.0, series1, category4);
	        dataset.addValue(56.0, series1, category5);
	        dataset.addValue(37.0, series1, category6);
	        dataset.addValue(77.0, series1, category7);
	        dataset.addValue(18.0, series1, category8);

	        return dataset;

	    }
}
